package com.groupYLP.CouponNexus.engine.mq.base;

import lombok.*;

import java.io.Serializable;

/**
 * MessageWrapper 类用于封装消息及其对应的键和时间戳。
 * 该类实现了 Serializable 接口，支持序列化，允许对象被序列化和反序列化。
 *
 * @param <T> 消息的泛型类型，用于封装任何类型的消息对象。
 */
@Data
@Builder
@NoArgsConstructor(force = true)
@AllArgsConstructor
@RequiredArgsConstructor
public class MessageWrapper<T> implements Serializable {

    /**
     * 序列化版本号，用于在序列化过程中进行版本控制。
     * 不同的 serialVersionUID 将在类定义发生变化时阻止序列化和反序列化过程。
     */
    private static final long serialVersionUID = 1L;

    /**
     * 与消息关联的键，使用 @NoNnull 注解标记，表示它必须有值且不能为 null。
     */
    @NonNull
    private String keys;

    /**
     * 泛型类型 T 的消息对象，用于存储实际的消息内容。
     */
    @NonNull
    private T message;

    /**
     * 时间戳记录消息创建或接收的时间，默认初始化为当前系统时间。
     */
    private Long timestamp = System.currentTimeMillis();
}


